﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using PraxisRent.BL;
using PraxisRent.Entities;
using Microsoft.Practices.Unity;

namespace PraxisRent.UI
{
    public partial class FrmMenu : Form
    {
        [Dependency]
        public IUsuarioMenuBL usuMenuBL { get; set; }

        public FrmMenu()
        {
            InitializeComponent();
            this.BuilUp();
            this.FormClosed += FrmMenu_FormClosed;
        }

        private void FrmMenu_FormClosed(object sender, System.Windows.Forms.FormClosedEventArgs e)
        {
            Application.Exit();
        }

        public USUARIO currentUsuario { get; set; }

        private void FrmMenu_Load(object sender, EventArgs e)
        {
            if (currentUsuario != null)
            {
                menuLlena();
                Text = "BIENVENIDO: " + currentUsuario.PERSONA.NombreCompleto;
                mostrarVencimiento();
            }
            else
                mostrarVencimiento();
        }

        public void mostrarVencimiento()
        {
            FrmVencimientoAlquileres frm = new FrmVencimientoAlquileres();
            frm.ShowDialog();
        }

        public void menuLlena()
        {
            var datoUsuario = usuMenuBL.GetAllFromUsuarioByPersonaFromLogin(currentUsuario.PERSONA.Dni);

            var permisos = (from c in usuMenuBL.GetAllFromUsuarioMenuByMenuId(datoUsuario.UsuarioId)
                            select c.MENU.Tag.ToString()).ToArray();

            Telerik.WinControls.RadItem[] menuRibon = new Telerik.WinControls.RadItem[] {
            this.mantenimiento,this.operador,this.busOperador,this.regOperador,this.tipoComprobante,this.busTipComprobante,this.regTipComprobante,
            this.sexo,this.busSexo,this.regSexo,this.estadoCivil,this.busEstadoCivil,this.regEstadoCivil,this.marca,this.busMarca,this.regMarca,
            this.color,this.busColor,this.regColor,this.tipoPago,this.busTipoPago,this.regTipoPago,this.tipoEquipo,this.busTipoEquipo,this.regTipoEquipo,
            this.administrador,this.usuario,this.busUsuario,this.regUsuario,this.Trabajador,this.busTrabajador,this.regTrabajador,this.rol,this.busRol,this.regRol,
            this.BGalquiler,this.alquiler,this.busAlquiler,this.regAlquiler,this.equipo,this.busEquipo,this.regEquipo,this.cliente,this.busCliente,this.regCliente,this.obra,this.busObra,this.regObra,
            this.BGentrega,this.entrega,this.busEntrega,this.regEntrega,this.BGdevolucion,this.devolucion,this.busDevolucion,this.regDevolucion,
            this.pagos,this.credito,this.busCredito,this.regCredito};

            //obtengo todos los PERMISOS NO ASIGNADOS al usuario
            var noVisible = from nv in menuRibon
                            where !permisos.Contains(nv.Tag.ToString())
                            select nv;

            //coloco NO VISIBLE a los permisos no asignados
            noVisible.ToList().ForEach(nv => nv.Visibility = Telerik.WinControls.ElementVisibility.Collapsed);
        }

        private void busCliente_Click(object sender, EventArgs e)
        {
            FrmCliente frm = new FrmCliente();
            frm.currentUsuarioCliente = currentUsuario;
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void regCliente_Click(object sender, EventArgs e)
        {
            FrmMttoCliente frm = new FrmMttoCliente();
            frm.NuevoCliente();
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void busObra_Click(object sender, EventArgs e)
        {
            FrmObra frm = new FrmObra();
            frm.currentUsuarioObra = currentUsuario;
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void regObra_Click(object sender, EventArgs e)
        {
            FrmMttoObra frm = new FrmMttoObra();
            frm.NuevaObra();
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void busAlquiler_Click(object sender, EventArgs e)
        {
            FrmAlquiler frm = new FrmAlquiler();
            frm.currentUsuarioAlquiler = currentUsuario;
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void regAlquiler_Click(object sender, EventArgs e)
        {
            FrmMttoAlquiler frm = new FrmMttoAlquiler();
            frm.NuevoAlquiler();
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void busEntrega_Click(object sender, EventArgs e)
        {
            FrmAlquiler frm = new FrmAlquiler();
            frm.currentUsuarioAlquiler = currentUsuario;
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void regEntrega_Click(object sender, EventArgs e)
        {
            FrmMttoEntrega frm = new FrmMttoEntrega();
            frm.NuevaEntrega();
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void busDevolucion_Click(object sender, EventArgs e)
        {
            FrmAlquiler frm = new FrmAlquiler();
            frm.currentUsuarioAlquiler = currentUsuario;
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void regDevolucion_Click(object sender, EventArgs e)
        {
            FrmMttoDevolucion frm = new FrmMttoDevolucion();
            frm.NuevaDevolucion();
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void busComprobante_Click(object sender, EventArgs e)
        {
            //FrmComprobantes frm = new FrmComprobantes();
            //frm.MdiParent = this;
            //frm.Show();
        }

        private void busOperador_Click(object sender, EventArgs e)
        {
            FrmOperador frm = new FrmOperador();
            frm.currentUsuarioOperador = currentUsuario;
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void regOperador_Click(object sender, EventArgs e)
        {
            FrmMttoOperador frm = new FrmMttoOperador();
            frm.NuevoOperador();
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void busTipComprobante_Click(object sender, EventArgs e)
        {
            FrmTipoComprobante frm = new FrmTipoComprobante();
            frm.currentUsuarioTipoComprobante = currentUsuario;
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void regTipComprobante_Click(object sender, EventArgs e)
        {
            FrmMttoTipoComprobante frm = new FrmMttoTipoComprobante();
            frm.NuevoTipComprobante();
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void busSexo_Click(object sender, EventArgs e)
        {
            FrmSexo frm = new FrmSexo();
            frm.currentUsuarioSexo = currentUsuario;
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void regSexo_Click(object sender, EventArgs e)
        {
            FrmMttoSexo frm = new FrmMttoSexo();
            frm.NuevaSexo();
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void busEstadoCivil_Click(object sender, EventArgs e)
        {
            FrmEstadoCivil frm = new FrmEstadoCivil();
            frm.currentUsuarioEstadoCivil = currentUsuario;
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void regEstadoCivil_Click(object sender, EventArgs e)
        {
            FrmMttoEstadoCivil frm = new FrmMttoEstadoCivil();
            frm.NuevoEstCivil();
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void busMarca_Click(object sender, EventArgs e)
        {
            FrmMarca frm = new FrmMarca();
            frm.currentUsuarioMarca = currentUsuario;
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void regMarca_Click(object sender, EventArgs e)
        {
            FrmMttoMarca frm = new FrmMttoMarca();
            frm.NuevaMarca();
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void busColor_Click(object sender, EventArgs e)
        {
            FrmColor frm = new FrmColor();
            frm.currentUsuarioColor = currentUsuario;
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void regColor_Click(object sender, EventArgs e)
        {
            FrmMttoColor frm = new FrmMttoColor();
            frm.NuevaColor();
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void busTipoPago_Click(object sender, EventArgs e)
        {
            FrmTipoPago frm = new FrmTipoPago();
            frm.currentUsuarioTipoPago = currentUsuario;
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void regTipoPago_Click(object sender, EventArgs e)
        {
            FrmMttoTipoPago frm = new FrmMttoTipoPago();
            frm.NuevoTipPago();
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void busTipoEquipo_Click(object sender, EventArgs e)
        {
            FrmTipoEquipo frm = new FrmTipoEquipo();
            frm.currentUsuarioTipoEquipo = currentUsuario;
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void regTipoEquipo_Click(object sender, EventArgs e)
        {
            FrmMttoTipoEquipo frm = new FrmMttoTipoEquipo();
            frm.NuevoTipEquipo();
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void busRol_Click(object sender, EventArgs e)
        {
            FrmRol frm = new FrmRol();
            frm.currentUsuarioRol = currentUsuario;
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void regRol_Click(object sender, EventArgs e)
        {
            FrmMttoRol frm = new FrmMttoRol();
            frm.NuevaRol();
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void cerrarSesion_Click(object sender, EventArgs e)
        {
            FrmLogin frm = new FrmLogin();
            frm.Show();
            this.Hide();
        }

        private void salir_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void busEquipo_Click(object sender, EventArgs e)
        {
            FrmEquipo frm = new FrmEquipo();
            frm.currentUsuarioEquipo = currentUsuario;
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void regEquipo_Click(object sender, EventArgs e)
        {
            FrmMttoEquipo frm = new FrmMttoEquipo();
            frm.NuevoEquipo();
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void busCredito_Click(object sender, EventArgs e)
        {
            FrmCredito frm = new FrmCredito();
            frm.currentUsuarioCredito = currentUsuario;
            frm.cargaData();
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void regCredito_Click(object sender, EventArgs e)
        {
            FrmMttoCredito frm = new FrmMttoCredito();
            frm.NuevoCredito();
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void cambiarPassword_Click(object sender, EventArgs e)
        {
            if (currentUsuario != null)
            {
                FrmCambiarPassword frm = new FrmCambiarPassword();
                frm._usuario = currentUsuario;
                frm.editarUsuario();
                frm.ShowDialog();
            }
            else
            {
                MessageBox.Show("Debe Iniciar Sesión", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void busUsuario_Click(object sender, EventArgs e)
        {
            FrmUsuario frm = new FrmUsuario();
            frm.currentUsuarioUsuario = currentUsuario;
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void regUsuario_Click(object sender, EventArgs e)
        {
            FrmMttoUsuario frm = new FrmMttoUsuario();
            frm.NuevoUsuario();
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void busTrabajador_Click(object sender, EventArgs e)
        {
            FrmPersona frm = new FrmPersona();
            frm.currentUsuarioPersona = currentUsuario;
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }

        private void regTrabajador_Click(object sender, EventArgs e)
        {
            FrmMttoPersona frm = new FrmMttoPersona();
            frm.NuevaPersona();
            frm.MdiParent = this;
            frm.Show();
            radRibbonBar1.Expanded = false;
        }
    }
}
